Code
library("CDR")
library("tidyverse")
ggplot(data = accidentes2020_data,
aes(x = coordenada_x_utm, y = coordenada_y_utm)) +
geom_point() +
coord_fixed()Los datos que se utilizan en esta historia están disponibles en el paquete CDR que puede instalarse con el siguiente comando:
install.packages("remotes")
remotes::install_github("cdr-book/CDR")Accidentes de tráfico en la Ciudad de Madrid registrados por Policía Municipal con víctimas y/o daños al patrimonio en el 2020. Los datos se han descargado del Portal de datos abiertos del Ayuntamiento de Madrid.)
Exercise 1 ¿Dónde se han producido los accidentes de tráfico en Madrid en el 2020?
library("CDR")
library("tidyverse")
ggplot(data = accidentes2020_data,
aes(x = coordenada_x_utm, y = coordenada_y_utm)) +
geom_point() +
coord_fixed()No tenemos información, solo unos datos represenados en un gráfico.
library("sf")
accidentes2020_sf <- st_as_sf(accidentes2020_data,
coords = c("coordenada_x_utm", "coordenada_y_utm"),
crs = 25830 # proyección ETRS89/ UTM zone 30N. Área de uso: Europa
)
library("mapSpain")
madrid <- esp_get_munic(munic = "^Madrid$") |>
st_transform(25830)
# descara imagen de un de mapa estático de las carreteas de Madrid
tile <- esp_getTiles(madrid, "IDErioja", zoommin = 2)
ggplot() +
tidyterra::geom_spatraster_rgb(data = tile) +
geom_sf(data = accidentes2020_sf,
col = "blue", size = 0.1, alpha = 0.3) +
coord_sf(expand = FALSE)Exercise 2 ¿Cuándo se han producido los accidentes?
ggplot(data = accidentes2020_data,
aes(x = fecha, y = hora)) +
geom_point() +
theme_minimal()library(data.table)
# Convertir la columna 'fecha' a formato Date
accidentes2020_data[, fecha := as.Date(fecha, format = "%d/%m/%Y")]Exercise 3 ¿De qué tipo son?
tipo_accidente n porcentaje
<fctr> <int> <num>
1: Alcance 7294 22.4936010
2: Atropello a animal 75 0.2312887
3: Atropello a persona 2127 6.5593487
4: Caída 2118 6.5315940
5: Choque contra obstáculo fijo 4667 14.3923274
6: Colisión frontal 899 2.7723810
7: Colisión fronto-lateral 8081 24.9205909
8: Colisión lateral 4386 13.5257656
9: Colisión múltiple 2231 6.8800691
10: Despeñamiento 2 0.0061677
11: Otro 251 0.7740463
12: Solo salida de la vía 151 0.4656613
13: Vuelco 145 0.4471582
Exercise 4 ¿Existe asociación entre el sexo y el tipo de persona (conductor, pasajero, peaton) que sufre el accidente?
library("gplots")
library(RColorBrewer)
# accidentes2020_data_sin_na <- accidentes2020_data |>
# na.omit()
balloonplot(table(accidentes2020_data$sexo , accidentes2020_data$tipo_persona))Exercise 5 ¿Existe asociación entre el sexo y el tipo de accidente?
library("ggmosaic")
accidentes2020_data |>
ggplot() +
geom_mosaic(aes(x = product(tipo_accidente, sexo),
fill=sexo)) niveles <- levels(factor(accidentes2020_data$tipo_accidente))
etiquetas <- set_names(str_wrap(niveles, width = 20),
niveles)
accidentes2020_data |>
ggplot(aes(sexo, fill = estado_meteorológico)) +
facet_wrap(vars(tipo_accidente),
labeller = as_labeller(etiquetas)) +
geom_bar() +
labs(fill = "Estado Meteorológico") +
theme(axis.text.x = element_text(angle = 90)) +
theme_minimal()# con la librería leflet podemos crear un mapa interactivo
library("leaflet")
library("sf")
utm_crs <- "+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs"
accidentes_sf <- st_as_sf(accidentes2020_data,
coords = c("coordenada_x_utm", "coordenada_y_utm"), crs = utm_crs)
accidentes_sf <- st_transform(accidentes_sf, crs = 4326)
accidentes2020_data$longitude <- st_coordinates(accidentes_sf)[, 1]
accidentes2020_data$latitude <- st_coordinates(accidentes_sf)[, 2]
leaflet(data = accidentes2020_data) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitude, lat = ~latitude,
radius = 2, color = "red", opacity = 0.5) %>%
addProviderTiles(providers$Esri.WorldImagery)library("leaflet")
library("sf")
accidentes2020_sf <- st_transform(accidentes2020_sf, crs = 4326)
accidentes2020_data$longitude <- st_coordinates(accidentes2020_sf)[, 1]
accidentes2020_data$latitude <- st_coordinates(accidentes2020_sf)[, 2]
leaflet(data = accidentes2020_data) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitude, lat = ~latitude,
radius = 1, color = "red", opacity = 0.5) # addProviderTiles(providers$Esri.WorldImagery)leaflet(data = accidentes2020_data) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitude, lat = ~latitude,
radius = 2, color = "red", opacity = 0.5, clusterOptions = markerClusterOptions())# ahora haz un mapa de calor
library("leaflet.extras")
leaflet(data = accidentes2020_data) %>%
addTiles() %>%
addHeatmap(lng = ~longitude, lat = ~latitude, blur = 20, max = 0.05)Exercise 6 ¿Dónde se registraron los accidentes el día de la declaración del Estado de Alarma en Madrid?
library(data.table)
# Convertir la columna 'fecha' a formato Date
accidentes2020_data[, fecha := as.Date(fecha, format = "%d/%m/%Y")]
# Definir el rango de fechas del estado de alarma
fecha_inicio <- as.Date("2020-03-14")
fecha_fin <- as.Date("2020-03-14")
# Filtrar el dataset por el rango de fechas
estado_alarma_data <- accidentes2020_data[fecha >= fecha_inicio & fecha <= fecha_fin]
# Crear un mapa con los accidentes
leaflet(data = estado_alarma_data) %>%
addTiles() %>%
addCircleMarkers(lng = ~longitude, lat = ~latitude,
radius = 3, color = "red", opacity = 0.5)